package bean.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import Entities.Producto;

public class ProductoDAO {

		private static ProductoDAO instancia;
		private static SessionFactory sf;
		
		public static ProductoDAO getInstancia(){
			if(instancia == null){
				sf = (HibernateDAO.getInstancia().getSession().getSessionFactory());
				instancia = new ProductoDAO();
			} 
			return instancia;
		}

		public Producto getProducto(int idPro) {
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Producto pro = (Producto) s.createQuery("from Producto where id = :id").setParameter("id", idPro).uniqueResult();		
			t.commit();
			return pro;
		}
		
		public void altaProducto(Producto pro)
		{
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			s.save(pro);
			t.commit();
			
		}

		public void bajaProducto(int id) {
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Query buscarProducto =  s.createQuery("SELECT p FROM Producto p WHERE p.Id = :id").setParameter("id",id);
			Producto pro = (Producto) buscarProducto.uniqueResult();
            //Borro el objeto de persistencia
            s.delete(pro);
			t.commit();
			
		}

		@SuppressWarnings("unchecked")
		public List<Producto> obtenerProductos() {
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			List<Producto> lista = s.createQuery("from Producto").list();
			t.commit();
			return lista;
		}

		public void actualizarProducto(Producto producto) {
			
			Session s = HibernateDAO.getInstancia().getSession();
			Transaction t = s.beginTransaction();
			Query buscarProducto =  s.createQuery("SELECT p FROM Producto p WHERE p.Id = :id").setParameter("id",producto.getId());
			Producto pro = (Producto) buscarProducto.uniqueResult();
	        
			pro.setApilable(producto.getApilable());
			pro.setDescripcion(producto.getDescripcion());
			pro.setDimensionX(producto.getDimensionX());
			pro.setDimensionY(producto.getDimensionY());
			pro.setDimensionZ(producto.getDimensionZ());
			pro.setRequiereRefrigeracion(producto.requiereRefrigeracion());
	        s.update(pro);
	        t.commit();
			
		}
		
		public static void setSf(SessionFactory sf) {
			ProductoDAO.sf = sf;
		}

		public static SessionFactory getSf() {
			return sf;
		}


		
	}




